home *** CD-ROM | disk | FTP | other *** search
- *cX RATON
- *cR
- Me he decidido a escribir este artículo,
- porque mucha gente queda alucinada al ver
- algun trabajo que soporte ratón, cuando es
- una de las cosas más fáciles de hacer, y
- además muy efectiva, ya que da un toque de
- profesionalidad a nuestros programas con el
- mínimo esfuerzo.
- Cuando encendemos el ordenador, el driver
- del ratón se instala en la interrupción 33h
- de la tabla de interrupciones. Por lo tanto,
- para accder a las muchas funciones que nos
- proporciona el driver, sólo tendremos que
- poner en los registros los valores adecuados
- y llamar a la interrupción. (Si no sabéis que
- es la tabla de interrupciones, da igual,
- tampoco necesitais saberlo).
- Para empezar, usaremos la función 00h. Para
- llamarla, sólo tenemos que poner
- *c4{ mov ax,00h
- int 33h } *cREl nº de la función siempre en
- AX y al finalizar siempre llamar a la int 33h
- Esta función hace un reset del ratón y nos
- devuelve dos valores: en ax, devuelve *cFFFFFh*cR
- si hay un ratón instalado, y en bx el nº de
- botones que tiene. Una vez sabemos que el
- usuario tiene un ratón instalado, tenemos dos
- funciones para esconder o mostrar el cursor
- del ratón (si no lo cambiamos mostrarà la
- flecha en modo gráfico y el rectángulo en
- modo texto).
- Para ver el ratón usaremos la función 1h
- (seguro que ya sabéis llamarla: *cT mov ax,01h*cR;
- *cWint 33h*cR) y para esconderlo, la función*cY 2h*cR.
- Aunque el ratón no se vea, se sigue actuali-
- zando su posición.
- Otras funciones interesantes, de las que
- muchas que tenemos són:
-
- *c1Poner el ratón en una determinada posición
- *c2 función:*c30004h
- *c2 cx=*c3posx
- *c2 dx=*c3posy
-
- *c1Limitar el movimiento del ratón horizontal
- mente.
- *c2 Función:*c30007h
- *c2 cx=*c3minx
- *c2 dx=*c3maxx
-
- *c1Limitar verticalmente
- *c2 Función:*c30008h
- *c2 cx=*c3miny
- *c2 dx=*c3maxy
- *cR
- Ahora, para empezar a utilizar el ratón,
- sólo nos queda por ver la función que nos
- permitirá conocer su posición y si los boto
- nes están apretados. Esta función es la 03h,
- y nos devuelve cada vez que la llamamos:
- *c2 CX= *c3posición x de la rata
- *c2 DX= *c3posición y de la rata
- *c2 BX= *c3Sus tres últimos bits (lsb)
- indican el estado de los botones.
- *c5 Bit 0=*c8botón izquierdo
- *c5 Bit 1=*c8botón derecho
- *c5 Bit 2=*c8botón central
- *cR
- Estos bits se ponen a uno cuando el botón
- está apretado, o sea que si bx vale 1 está
- apretado el botón izquierdo, si vale dos el
- derecho, si tres el izquierdo y el derecho al
- mismo tiempo...
- Tenemos que estar atentos a las coordenadas
- devueltas en CX y DX, ya que están en mic
- keys, que es la unidad de medida del ratón.
- Depende de que modo estemos utilizando,
- tendremos que hacer una conversión a nuestras
- coordenadas (por ejemplo en modo texto,
- tendremos que dividir las coordenadas por
- ocho, o lo que es lo mismo desplazar los
- registros tres bits a la derecha).
- Ahora que ya podemos utilizar el ratón en
- nuestras apliaciones, vamos a ver otra manera
- de controlar el ratón más avanzada,y lógica
- mente más difícil.
- Veremos como controlar el ratón mediante
- interrupción, con este método conseguimos,
- que el ratón actualize su posición automáti
- camente, y no tengamos que ir preguntando
- con la función anterior (método polling).
- Mediante este método podemos hacer que una
- función nuestra sea llamada por el driver del
- ratón cada vez que pase un suceso determina
- do. Esta función nuestra será la que actuali
- zará las posiciones,y todas las demás cosas
- que queramos.
- Para hacer esto primero tendremos que
- instalar un controlador de eventos, al que
- tenemos que decir la función a la que quere
- mos que llame y cuando tiene que llamarla.
- *c2
- Función : *c30Ch
- *c2 ES:DX :*c3 segmento y desplazamiento de
- nuestra función CX: máscara
- de eventos.
- *c4 Significado de la máscara
- *c8 bit 0:*c5 movimiento del ratón
- *c8 bit 1:*c5 pulsado botón izquierdo
- *c8 bit 2:*c5 soltado botón izquierdo
- *c8 bit 3:*c5 pulsado botón derecho
- *c8 bit 4:*c5 soltado botón derecho
- *c8 bit 5:*c5 pulsado botón central
- *c8 bit 6:*c5 soltado botón central
- *cR
- Como siempre se pueden hacer combinaciones,
- por ejemplo si ponemos*c9 cx=7 *cR(1+2+4) nuestra
- función será llamada siempre que el ratón se
- mueva, o se pulse o suelte el botón izquier
- do.
- Este controlador que hemos instalado, cada
- vez que llame a nuestra función, le pasará la
- siguiente información: en AX tendremos infor
- mación de los sucesos por los que ha sido
- llamada nuestra función y de otros sucesos
- que se hayan podido producir, con el mismo
- significado que la máscara de CX que hemos
- visto antes. En CX la posición X, en DX la Y
- y en BX el estado de los botones.
- Antes de acabar el programa tenemos que
- desinstalar el controlador, para hacer esto,
- lo más fácil és copiar la rutina de instala
- ción, pero poniendo en CX un 0, así consegui
- mos que nuestra función no sea llamada nunca.
-
- Espero que os hayais enterado de algo y que
- os sea útil. Si tenéis alguna duda o comenta
- rio, podeís escribir a
- *c2 cabsagjo@eupmt.upc.es
- *cR
- (eupmt=esculea universitaria politécnica de
- Mataró, un poco de publicidad no va a hacer
- daño a nadie) o:
- *c7
- Jordi Cabot
- C/Josep Sabater 3
- 08301 Mataró
- Barcelona
-
- *cR
- ** Os pongo un ejemplo donde se ven algunas de
- las funciones explicadas, y el tema del
- controlador (lo teneis en el directorio
- "raton").
-
-